package solutions.ferpa.ztest.intf;

import br.com.telescope.adsrt.dom.DomFlag;
import br.com.telescope.adsrt.dom.DomId;
import br.com.telescope.adsrt.dom.DomText;
import br.com.telescope.adsrt.lib.*;
import br.com.telescope.t2.ServiceModel;
import br.com.telescope.t2.exception.ApplicationRuntimeException;
import br.com.telescope.t2.feature.CustomActionFeature;
import br.com.telescope.t2.feature.DeleteFeature;
import br.com.telescope.t2.feature.InsertFeature;
import br.com.telescope.t2.feature.ListFeature;
import br.com.telescope.t2.feature.QueryFeature;
import br.com.telescope.t2.feature.UpdateFeature;
import solutions.ferpa.ztest.ent.*;

/**
 * Tipos de implementações.
 * <p>
 * Permite manter os tipos de implementação aceitos pelo sistema. 
 * Normalmente, não é necessário cadastrar os tipos de implementação 
 * jamais devem ser alterados porque dependem da infraestrutura de 
 * runtime do sistema.
 * <P>
 * Use a opção "Atualizar" para que o sistema registre automaticamente os 
 * tipos de implementação disponíveis.
 * <P>
 * 
 * <P>
 * Telescope origin: RTSYSINF.CAD_TIPOS_IMPLEMENTACOES
 * <P>
 * Base entity: RTSYSINF.TIPOS_IMPLEMENTACOES
 * <P>
 * @author TELESCOPE - Build task T2 Web Interface Generator
 * <P>
 * @version 0.1
 */
public class CadTiposImplementacoes extends ServiceModel {
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    public static final String GLOBAL_NAME = "RTSYSINF.CAD_TIPOS_IMPLEMENTACOES";
    
    @Override
    public String globalName() {
        return GLOBAL_NAME;
    }
    
    {
        setTitle("Tipos de implementações");
    }
    
    protected EntTiposImplementacoes base;
    protected EntTiposImplementacoes rec; // NEED_TJW1_COMPATIBILITY
    
    // Record items
    private DomText aTipoImplementacao;
    private DomFlag aScript;
    private DomFlag aCriarOperacao;
    private DomText aMecanismoExecucao;
    private DomId aId;
    
    // Query items
    private DomFlag qScript;
    private DomText qTipoImplementacao;
    private DomText qMecanismoExecucao;
    private DomFlag qCriarOperacao;
    
    @Override
    public String getBaseSql() {
        return "select BASE.*"
                + " from TIPOS_IMPLEMENTACOES BASE";
    }
    
    @Override
    public void initAttributes() {
        
        aTipoImplementacao = new DomText();
        aTipoImplementacao.context(ctx).name("TIPO_IMPLEMENTACAO").label("Tipo de implementacao");
        
        aScript = new DomFlag();
        aScript.context(ctx).name("SCRIPT").label("Script");
        aScript.setDefaultValue("S");
        
        aCriarOperacao = new DomFlag();
        aCriarOperacao.context(ctx).name("CRIAR_OPERACAO").label("Criar operação");
        
        aMecanismoExecucao = new DomText();
        aMecanismoExecucao.context(ctx).name("MECANISMO_EXECUCAO").label("Mecanismo de execução");
        
        aId = new DomId();
        aId.context(ctx).name("ID").label("Id");
        
        
        qScript = new DomFlag();
        qScript.context(ctx).name("SCRIPT").label("Script");
        
        qTipoImplementacao = new DomText();
        qTipoImplementacao.context(ctx).name("TIPO_IMPLEMENTACAO").label("Tipo de implementacao");
        
        qMecanismoExecucao = new DomText();
        qMecanismoExecucao.context(ctx).name("MECANISMO_EXECUCAO").label("Mecanismo de execução");
        
        qCriarOperacao = new DomFlag();
        qCriarOperacao.context(ctx).name("CRIAR_OPERACAO").label("Criar operação");
    }
    
    @Override
    public String getQueryPkColumn() {
        return "BASE.ID";
    }
    
    @Override
    public void setId(String value) {
        this.aId.setValue(value);
    }
    
    @Override
    public EntTiposImplementacoes getRecord() {
        if (base == null) {
            base = new EntTiposImplementacoes(ctx);
            rec = base;
        }
        return this.base;
    }
    
    @Override
    public String getContextName() {
        return aTipoImplementacao.toText();
    }
    
    @Override
    public String getDefaultOrderBy() {
        return "TIPO_IMPLEMENTACAO, SCRIPT, CRIAR_OPERACAO, MECANISMO_EXECUCAO";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="QUERY">
    public class FQuery extends QueryFeature {
        
        @Override
        public void initForm() {
            addField(qTipoImplementacao, "opt");
            addField(qScript, "opt");
            addField(qCriarOperacao, "opt");
            addField(qMecanismoExecucao, "opt");
        }
        
        @Override
        public void onAction() {
            addCancel(getFeature("ATUALIZAR")).label("Atualizar");
        }
        
        {
            setFeatureName("QUERY");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="LIST">
    public class FList extends ListFeature {
        
        @Override
        public void initForm() {
            addField(aTipoImplementacao, "view");
            addField(aScript, "view");
            addField(aCriarOperacao, "view");
            addField(aMecanismoExecucao, "view");
        }
        
        @Override
        public void onAction() {
            addSubmit(getFeature("ATUALIZAR")).label("Atualizar");
        }
        
        {
            setFeatureName("LIST");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="INSERT">
    public class FInsert extends InsertFeature {
        
        @Override
        public void initForm() {
            aTipoImplementacao.setOptional(false);
            addField(aTipoImplementacao, "rqd");
            aScript.setOptional(false);
            addField(aScript, "rqd");
            aCriarOperacao.setOptional(false);
            addField(aCriarOperacao, "rqd");
            aMecanismoExecucao.setOptional(false);
            addField(aMecanismoExecucao, "rqd");
        }
        
        {
            setFeatureName("INSERT");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="UPDATE">
    public class FUpdate extends UpdateFeature {
        
        @Override
        public void initForm() {
            aTipoImplementacao.setOptional(false);
            addField(aTipoImplementacao, "rqd");
            aScript.setOptional(false);
            addField(aScript, "rqd");
            aCriarOperacao.setOptional(false);
            addField(aCriarOperacao, "rqd");
            aMecanismoExecucao.setOptional(false);
            addField(aMecanismoExecucao, "rqd");
        }
        
        {
            setFeatureName("UPDATE");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="DELETE">
    public class FDelete extends DeleteFeature {
        
        @Override
        public void initForm() {
            addField(aTipoImplementacao, "view");
        }
        
        {
            setFeatureName("DELETE");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="ATUALIZAR">
    public class FAtualizar extends CustomActionFeature {
        
        @Override
        public void initForm() {
        }
        
        @Override
        public void execute() {
            try {
                atualizar();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        {
            setFeatureName("ATUALIZAR");
            setTitle("Atualizar");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="initFeatures">
    
    @Override
    protected void initFeatures() {
        addFeature(new FQuery());
        addFeature(new FList());
        addFeature(new FInsert());
        addFeature(new FUpdate());
        addFeature(new FDelete());
        addFeature(new FAtualizar());
        super.initFeatures();
    }
    
    @Override
    public String getDefaultFeature() {
        return "QUERY";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">
    
    public String getTipoImplementacao() {
        return aTipoImplementacao.getValue();
    }
    
    public void setTipoImplementacao(String value) {
        this.aTipoImplementacao.setValue(value);
    }
    
    public String getScript() {
        return aScript.getValue();
    }
    
    public void setScript(String value) {
        this.aScript.setValue(value);
    }
    
    public String getCriarOperacao() {
        return aCriarOperacao.getValue();
    }
    
    public void setCriarOperacao(String value) {
        this.aCriarOperacao.setValue(value);
    }
    
    public String getMecanismoExecucao() {
        return aMecanismoExecucao.getValue();
    }
    
    public void setMecanismoExecucao(String value) {
        this.aMecanismoExecucao.setValue(value);
    }
    
    @Override
    public Long getId() {
        return aId.getValue();
    }
    
    public void setId(Long value) {
        this.aId.setValue(value);
    }
    public String getQueryTipoImplementacao() {
        return qTipoImplementacao.getQueryValue();
    }
    
    public void setQueryTipoImplementacao(String value) {
        this.qTipoImplementacao.setQueryValue(value);
    }
    public String getQueryScript() {
        return qScript.getQueryValue();
    }
    
    public void setQueryScript(String value) {
        this.qScript.setQueryValue(value);
    }
    public String getQueryCriarOperacao() {
        return qCriarOperacao.getQueryValue();
    }
    
    public void setQueryCriarOperacao(String value) {
        this.qCriarOperacao.setQueryValue(value);
    }
    public String getQueryMecanismoExecucao() {
        return qMecanismoExecucao.getQueryValue();
    }
    
    public void setQueryMecanismoExecucao(String value) {
        this.qMecanismoExecucao.setQueryValue(value);
    }
    // </editor-fold>
    
    /**
     * Atualizar.
     * <p>
     * Atualiza os tipos de implementação conforme disponibilidade no 
     * ambiente.
     */
    public void atualizar() throws AdsException {
        // <user-code id="2505835" parentId="2505825" hashcode="-39228bad" length="114">
        EntTiposImplementacoes tipo = new EntTiposImplementacoes(ctx);
        tipo.atualizarTiposImplementacoes();
        doIndex();
        
        // </user-code>
    }
}
